package gui_kalenderpanel;
import java.awt.*;
import model.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;

import javax.swing.*;


public class InnholdsPanel extends JPanel{
	
	JLabel beskLab;
	JLabel datoLab;
	JLabel startTidLab;
	JLabel sluttTidLab;
	JLabel stedLab;
	JLabel deltLab;
	JTextField beskText;
	JComboBox dagBox;
	JComboBox maanBox;
	JComboBox aarBox;
	JComboBox startBox;
	JComboBox sluttBox;
	JComboBox romBox;
	JTextField stedText;
	JButton slettDeltager;
	JComboBox deltagerBox;			//lag egen klasse?
	JList deltagerList;
	Calendar cal;
	KalenderKontroll kalkont;
	
	DefaultListModel lm;
	Avtale current;
	int id;
	
	//Innhold for dato ComboBoxer
	private String[] dager31;
	private String[] maaneder = {"Januar","Februar","Mars","April","Mai","Juni","Juli","August","September","Oktober","November","Desember"};
	private String[] aar = {"2012","2013","2014","2015","2016"};
	
	//Innhold for tid ComboBoxer
	private String[] startTider = {"00:00","01:00","02:00","03:00","04:00","05:00","06:00","07:00","08:00","09:00","10:00","11:00","12:00","13:00","14:00","15:00","16:00","17:00","18:00","19:00","20:00","21:00","22:00","23:00"};
	private String[] sluttTider = {"01:00","02:00","03:00","04:00","05:00","06:00","07:00","08:00","09:00","10:00","11:00","12:00","13:00","14:00","15:00","16:00","17:00","18:00","19:00","20:00","21:00","22:00","23:00","24:00"};
	
	//Innhold for rom ComboBox
	private String[] rom;
	
	//Innhold for deltagere ComboBox
	String[] deltagereNavn;

	private ArrayList<Deltager> deltagere;

	
	public InnholdsPanel( KalenderKontroll tempKal) {

		setLayout(new GridBagLayout());
		GridBagConstraints c = new GridBagConstraints();
		kalkont = tempKal;
		
		c.anchor = GridBagConstraints.WEST;
		c.insets = new Insets(5,5,0,0);
		
		//legg inn labels/////////////////////////////
													//
		beskLab = new JLabel("Beskrivelse: ");		//
													//
		c.weightx = 0.5;							//
		c.gridx = 0;								//
		c.gridy = 0;								//
		add(beskLab, c);							//
													//
		datoLab = new JLabel("Dato: ");				//
		c.gridy = 1;								//
		add(datoLab, c);							//
													//
		startTidLab = new JLabel("Start: ");		//
		c.gridy = 2;								//
		add(startTidLab, c);						//
													//
		sluttTidLab = new JLabel("Slutt: ");		//
		c.gridy = 3;								//
		add(sluttTidLab, c);						//
													//
		stedLab = new JLabel("Sted: ");				//
		c.gridy = 4;								//
		add(stedLab, c);							//
													//
		deltLab = new JLabel("Deltagere: ");		//
		c.gridy = 7;								//
		add(deltLab, c);							//
													//
		//////////////////////////////////////////////
		
		//legg in data-fields/////////////////////////
													//
		beskText = new JTextField(16);				//
		c.gridx = 1;								//
		c.gridy = 0;								//
		add(beskText, c);							//
													//////////////////////////////////
		//set opp liste av dager for comboBox paa dato								//
		setOppDager();																//
		cal = Calendar.getInstance();												//
																					//
		//mini-panel for dato ComboBoxer//////////////////////////////////////////////
		JPanel datoPan = new JPanel();												//
		dagBox = new JComboBox(dager31);											//
		maanBox = new JComboBox(maaneder);											//
		aarBox = new JComboBox(aar);												//
		setIdag();																	//
																					//
		maanBox.addActionListener(new ActionListener() {							//
			public void actionPerformed(ActionEvent e) {							//
				String aar = (String) aarBox.getSelectedItem();						//
				int n = Integer.parseInt(aar);										//
				int i = maanBox.getSelectedIndex();									//
				if (i == 0 || i == 2 || i == 4 || i == 7 || i == 9 || i == 11) {	//
					skjiftDager(31);												//
				}																	//
				else if (i == 3 || i == 5 || i == 6 || i == 8 || i == 10) {			//
					skjiftDager(30);												//
				}																	//
				else if (i == 1 && n%4 == 0) {										//
					skjiftDager(29);												//
				}																	//
				else {																//
					skjiftDager(28);												//
				}																	//
			}																		//
		});																			//
																					//
		aarBox.addActionListener(new ActionListener() {								//
			public void actionPerformed(ActionEvent e) {							//
				if (maanBox.getSelectedIndex() == 1) {								//
					String aar = (String) aarBox.getSelectedItem();					//
					int n = Integer.parseInt(aar);									//
					if (n % 4 == 0) {												//
						skjiftDager(29);											//
					}																//
					else {															//
						skjiftDager(28);											//
					}																//
				}																	//
			}																		//
		});																			//
																					//
		datoPan.add(dagBox);														//
		datoPan.add(maanBox);														//
		datoPan.add(aarBox);														//
		//////////////////////////////////////////////////////////////////////////////
																//
		c.gridy = 1;											//
		add(datoPan, c);										//
																//
		startBox = new JComboBox(startTider);					//
		startBox.addActionListener(new ActionListener() {		//
			public void actionPerformed(ActionEvent e) {		//
				//faa sluttBox til aa reagere paa startBox		//
				int tid = startBox.getSelectedIndex();			//
				skjiftSluttBox(tid);							//
			}													//
		});														//
		c.gridy = 2;											//
		add(startBox, c);										//
																//
		sluttBox = new JComboBox(sluttTider);					//
		c.gridy = 3;											//
		add(sluttBox, c);										//
																//
		//bruk for aa sette opp romliste						//
		setOppRom();											//
																//
		romBox = new JComboBox(rom);							//
		romBox.addActionListener(new ActionListener() {			//
			public void actionPerformed(ActionEvent e) {		//////////
				stedText.setText((String) romBox.getSelectedItem());	//
			}															//
		});														//////////
		c.gridy = 4;											//
		add(romBox, c);											//
																//
		stedText = new JTextField(16);							//
		c.gridy = 5;											//
		add(stedText, c);										//
																//
		//bruk for aa sette opp deltagerBox						//	
		setOppPersoner();										//	
		lm = new DefaultListModel();							//	
		deltagerList = new JList(lm);							//	
		deltagerBox = new JComboBox(deltagereNavn);				//	
		deltagerBox.addActionListener(new DeltListener());		//
		c.gridy = 6;											//
		c.gridx = 0;											//
		c.gridwidth = 1;										//
		add(deltagerBox, c);									//
																//
		slettDeltager = new JButton("Slett valgt deltager");	//
		slettDeltager.addActionListener(new ActionListener() {	//
			public void actionPerformed(ActionEvent e) {		//
				if (!deltagerList.isSelectionEmpty()) {			//
					int ind = deltagerList.getSelectedIndex();	//
					String temp = ((Deltager) deltagerList.getSelectedValue()).getNavn();
					deltagerBox.addItem(temp);
					lm.remove(ind);								//
					deltagere.remove(ind);						//
					kalkont.getTjener().getBruker(temp).fjernAvtale(getCurrent());
				}
			}													//
		});														//
		c.gridy = 6;											//
		c.gridx = 1;											//
		c.gridwidth = 1;										//
		add(slettDeltager, c);									//
																//
		deltagerList.setVisibleRowCount(7);						//
		deltagerList.setCellRenderer(new DeltagerRenderer());	//
		JScrollPane scroll;										//
		scroll = new JScrollPane(deltagerList);					//
		scroll.setPreferredSize(new Dimension(300,100));		//
		c.gridx = 0;
		c.gridy = 8;											//
		c.gridwidth = 2;
		add(scroll, c);											//
		//////////////////////////////////////////////////////////
	}
	
	//Bruk for aa sette opp dager i maaneder
	public void setOppDager() {
		dager31 = new String[31];
		int i = 1;
		while (i <= 31) {
			dager31[i-1] = Integer.toString(i);
			i++;
		}
	}
	
	//bruk for aa skjifte antal dager i forhold til maaned
	public void skjiftDager(int antallDager) {
		int current = dagBox.getSelectedIndex();
		int i = 0;
		switch (antallDager) {		
		case 28: dagBox.removeAllItems();
				 while (i < 28)
				 {
					 dagBox.addItem(dager31[i]);
					 i++;
				 }
				 break;				
		case 29: dagBox.removeAllItems();
				 while (i < 29)
				 {
					 dagBox.addItem(dager31[i]);
					 i++;
				 }
				 break;				
		case 30: dagBox.removeAllItems();
				 while (i < 30)
				 {
					 dagBox.addItem(dager31[i]);
					 i++;
				 }
				 break;			
		case 31: dagBox.removeAllItems();
				 while (i < 31)
				 {
					 dagBox.addItem(dager31[i]);
					 i++;
				 }
				 break;				
		}						
		if (current < antallDager) {
			dagBox.setSelectedIndex(current);
		}
	}
	
	public void skjiftSluttBox(int tid) {
		int stor = 24 - tid;
		sluttBox.removeAllItems();
		int i = 0;
		while (i < stor) {
			if ((tid + i + 1) < 10) {
				sluttBox.addItem("0" + (tid + i + 1) + ":00");
			}
			else {
				sluttBox.addItem("" + (tid + i + 1) + ":00");
			}
			i++;
		}
		
	}
	
	public void setOppRom() {				//*********************************
		//Bruk for aa finne ledige rom!		//*********************************
		rom = new String[2];				//*********************************
		rom[0] = "Velg Rom:";				//*********************************
		rom[1] = "414 (3)";					//*********************************
											//*********************************
		Calendar dato = getDato();			//*********************************
		int startTid = getStart();			//*********************************
		int sluttTid = getSlutt();			//*********************************
		rom = kalkont.getTjener().finnLedigRom(dato, startTid, sluttTid);	//Venter paa implementasjon av metoden i tjener
	}
	
	public void setOppPersoner() {
		//Bruk for aa faa liste av alle personer
		String[] personer = kalkont.hentAlleNavn();
		deltagereNavn = new String[personer.length+1];
		deltagereNavn[0] = "Velg Deltagere";		
		int i = 1;
		for(String navn:personer){
			deltagereNavn[i++] = navn;
		}										
	}
	
	public void setAvtale(Avtale denne) {
		setBeskrivelse(denne.getBeskrivelse());
		setDato(denne.getDato());
		setStart(denne.getStart());
		setSlutt(denne.getSlutt());
		setSted(denne.getSted());
		deltagere = denne.getDeltagere();
		id = denne.getId();
//		current = denne;
		//fyll deltagerlist
		for (int i = 0; i < deltagere.size(); i++) {
			lm.addElement(deltagere.get(i));
		}
		
	}
	
	public void setNyAv(int nyav) {
		id = nyav;
	}
	
	public Avtale getAvtale() {
		Avtale temp = new Avtale();
		if (id == 0) {
			id = (int) (Math.random() * 1000);
		}
		else {
			id = current.getId();
		}
		
		temp.setBeskrivelse(getBeskrivelse());
		temp.setDato(getDato());
		temp.setStart(getStart());
		temp.setSlutt(getSlutt());
		temp.setSted(getSted());
		if (!lm.isEmpty()) {
			temp.setMote(true);
			temp.setDeltagere(getDeltagere());
		}
		else {
			temp.setMote(false);
			temp.setDeltagere(new ArrayList<Deltager>());
		}
		temp.setId(id);
		System.out.println(temp);
		System.out.println(temp);
		return temp;
	}
	
	public Avtale getCurrent() {
		return current;
	}
	
	public void setCurrent(Avtale temp) {
		current = temp;
		deltagere = temp.getDeltagere();
		id = temp.getId();
		
	}
	
	public boolean sjekk() {
		if (getBeskrivelse().isEmpty()) {
			return false;
		}
		if (getSted().isEmpty()) {
			return false;
		}
		//sjekk om gyldig avtale		//*********************************
										//*********************************
		return true;					//*********************************
	}
	
	
	//Setters//Setters//Setters//Setters//Setters//Setters//Setters//Setters
	
	public void setBeskrivelse(String besk) {
		beskText.setText(besk);
	}
	
	public void setDato(Calendar dato) {
		int dag = dato.get(Calendar.DAY_OF_MONTH);
		dagBox.setSelectedIndex(dag-1);
		
		int maned = dato.get(Calendar.MONTH);
		maanBox.setSelectedIndex(maned);
		
		int aar = dato.get(Calendar.YEAR);
		aarBox.setSelectedItem("" + aar);
	}
	
	public void setStart(int start) {
		startBox.setSelectedIndex(start);
	}
	
	public void setSlutt(int slutt) {
		sluttBox.setSelectedIndex(slutt-1-getStart());
	}
	
	public void setSted(String sted) {
		romBox.setSelectedItem(sted);
		stedText.setText(sted);
	}
	
	public void setDeltagere(ArrayList<Deltager> deltagers) {
		deltagere = deltagers;
	}
	
	//Getters//Getters//Getters//Getters//Getters//Getters//Getters//Getters
	
	public String getBeskrivelse() {
		String besk = beskText.getText();
		return besk;
	}
	
	public Calendar getDato() {
		Calendar dato = Calendar.getInstance();
		int dag = dagBox.getSelectedIndex()+1;
		int maned = maanBox.getSelectedIndex();
		int aar = Integer.parseInt((String) aarBox.getSelectedItem());
		dato.set(aar, maned, dag);
		return dato;
	}
	
	public int getStart() {
		int startTid = startBox.getSelectedIndex();
		return startTid;
	}
	
	public int getSlutt() {
		int sluttTid = sluttBox.getSelectedIndex() + 1 + getStart();
		System.out.println(sluttTid);
		return sluttTid;
	}
	
	public String getSted() {
		String sted = stedText.getText();
		return sted;
	}
	
	public ArrayList<Deltager> getDeltagere() {
		return this.deltagere;
	}
	
	public void activate(boolean yep) {
		beskText.setEditable(yep);
		dagBox.setEnabled(yep);
		maanBox.setEnabled(yep);
		aarBox.setEnabled(yep);
		startBox.setEnabled(yep);
		sluttBox.setEnabled(yep);
		romBox.setEnabled(yep);
		stedText.setEditable(yep);
		deltagerBox.setEnabled(yep);
		deltagerList.setEnabled(yep);
		if (yep) {
			deltagerList.setBackground(Color.WHITE);
		}
		else {
			deltagerList.setBackground(Color.LIGHT_GRAY);
		}
		slettDeltager.setEnabled(yep);
	}
	
	public void empty() {
		beskText.setText("");
		setIdag();
		aarBox.setSelectedIndex(0);
		startBox.setSelectedIndex(0);
		sluttBox.setSelectedIndex(0);
		romBox.setSelectedIndex(0);
		stedText.setText("");
		deltagerBox.setSelectedIndex(0);
		lm.removeAllElements();
		deltagere = new ArrayList<Deltager>();
		deltagere.clear();
		current = null;
	}
	
	public void setIdag() {
		//Setter default dato til idag										
		String aartemp = (String) aarBox.getSelectedItem();
		int aarInt = Integer.parseInt(aartemp);										
		int curMon = cal.get(Calendar.MONTH);
		maanBox.setSelectedIndex(curMon);														
		if (curMon == 3 || curMon == 5 || curMon == 6 || curMon == 8 || curMon == 10) {
			skjiftDager(30);														
		}																			
		else if (curMon == 1 && aarInt%4 == 0) {									
			skjiftDager(29);														
		}																			
		else if (curMon == 1) {														
			skjiftDager(28);														
		}
		int curDay = cal.get(Calendar.DAY_OF_MONTH);
		dagBox.setSelectedIndex(curDay-1);
	}
	
	public class DeltListener implements ActionListener {
		public void actionPerformed(ActionEvent e) {			
			if (deltagerBox.getSelectedIndex() > 0) {		
				int temp = deltagerBox.getSelectedIndex() - 1;		
				String navntemp = (String) deltagerBox.getSelectedItem();
				Deltager deltTemp = new Deltager();					
				deltTemp.setNavn(navntemp);								
				deltTemp.setStatus(Status.ikkeSvart);					
				lm.addElement(deltTemp);							
				deltagere.add(deltTemp);
				int rem = deltagerBox.getSelectedIndex();
				deltagerBox.setSelectedIndex(0);
				deltagerBox.removeItemAt(rem);
				deltagerBox.validate();
			}													
		}
	}
	
}

